package base

import (
	"golang.org/x/crypto/bcrypt"
)

// 登陆用户
type User struct {
	ID       uint       `json:"id"`
	Username string     `json:"username"`
	Password string     `json:"password"`
	Name     string     `json:"name"`
	NickName string     `json:"nickname"`
	Mobile   string     `json:"mobile"`
	Status   UserStatus `json:"status"`
}

// 密码比较
func (m User) ComparePassword(passwd string) error {
	return bcrypt.CompareHashAndPassword([]byte(m.Password), []byte(passwd))
}

// 密码加密
func (m *User) BcryptPassword() error {
	pwd, err := bcrypt.GenerateFromPassword([]byte(m.Password), bcrypt.DefaultCost)
	if err != nil {
		return err
	}
	m.Password = string(pwd)
	return nil
}

// 用户状态
type UserStatus int

const (
	// 默认状态
	UserStatusDefault UserStatus = iota
	// 离职
	UserStatusDimission
)

// 状态名称
func (s UserStatus) String() string {
	switch s {
	case UserStatusDimission:
		return "离职"
	default:
		return "默认状态"
	}
}
